package com.example.demo.common;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/**
 * Created by Administrator on 2018/1/26 0026.
 * 1. 什么是跨域HTTP请求

 现代浏览器出于安全的考虑，使用 XMLHttpRequest对象发起 HTTP请求时必须遵守同源策略，否则就是跨域的HTTP请求，默认情况下是被禁止的。跨域HTTP请求是指A域上资源请求了B域上的资源，举例而言，部署在A机器上Nginx上的js代码通过ajax请求了部署在B机器Tomcat上的RESTful接口。

 IP（域名）不同、或者端口不同，都会造成跨域问题。为了解决跨域的问题，曾经出现过jsonp、代理文件等方案，应用场景受限，维护成本高，直到HTML5带来了CORS协议。

 CORS是一个W3C标准，全称是”跨域资源共享”（Cross-origin resource sharing），允许浏览器向跨源服务器，发出XMLHttpRequest请求，从而克服了AJAX只能同源使用的限制。它通过服务器增加一个特殊的Header[Access-Control-Allow-Origin]来告诉客户端跨域的限制，如果浏览器支持CORS、并且判断Origin通过的话，就会允许XMLHttpRequest发起跨域请求。

 CROS常见header

 Access-Control-Allow-Origin:http://somehost.com 表示允许http://somehost.com发起跨域请求。

 Access-Control-Max-Age:86400 表示在86400秒内不需要再发送预校验请求。

 Access-Control-Allow-Methods: GET,POST,PUT,DELETE 表示允许跨域请求的方法。

 Access-Control-Allow-Headers: content-type 表示允许跨域请求包含content-type

 2. 在spring boot工程中配置CORS跨域

 这里匹配了所有的URL，允许所有的外域发起跨域请求，允许外域发起请求任意HTTP Method，允许跨域请求包含任意的头信息。

 作者：郭寻抚
 链接：https://www.jianshu.com/p/55643abe7a18
 來源：简书
 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
 */
@Configuration
public class CORSConfiguration {
    @Bean
    public WebMvcConfigurer configurer(){
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**")
                        .allowedHeaders("*")
                        .allowedMethods("*")
                        .allowedOrigins("*");
            }
        };
    }
}
